package lx6;
 /*
            有一个抽奖池,该抽奖池中存放了奖励的金额,该抽奖池中的奖项为 {10,5,20,50,100,200,500,800,2,80,300,700};
            创建两个抽奖箱(线程)设置线程名称分别为“抽奖箱1”，“抽奖箱2”
            随机从抽奖池中获取奖项元素并打印在控制台上,格式如下:
            每次抽的过程中，不打印，抽完时一次性打印(随机)    在此次抽奖过程中，抽奖箱1总共产生了6个奖项。
                分别为：10,20,100,500,2,300最高奖项为300元，总计额为932元
            在此次抽奖过程中，抽奖箱2总共产生了6个奖项。
                分别为：5,50,200,800,80,700最高奖项为800元，总计额为1835元
        */

import java.util.ArrayList;
import java.util.Collections;

public class MyThread extends Thread {
    //共享数据
    // 奖励的金额
    ArrayList<Integer> list;

    public MyThread(ArrayList<Integer> list) {
        this.list = list;
    }

    //线程1的
    static ArrayList<Integer> list1 = new ArrayList<>();
    //线程2的
    static ArrayList<Integer> list2 = new ArrayList<>();
/*
我们采用随机抽一个删一个的方法
 */

    @Override
    public void run() {
        //1.循环
        while (true) {

            //同步代码块
            synchronized (MyThread.class) {
                //判断共享数据是否到了末尾（到了末尾）

                if (list.size() == 0) {

                    break;
                } else {
                    //判断共享数据是否到了末尾（还没有到末尾）
                    //随机一个删一个
                    Collections.shuffle(list);
                    int index = list.get(0);
                    //  System.out.println(getName() + "又产生了一个" + index + "元大奖");

                    list.remove(0);
                    if ("抽奖箱1".equals(getName())) {
                        list1.add(index);
                    } else {
                        list2.add(index);
                    }

                }

            }
            /*
            把sleep代码写在锁的外面
            因为当线程1进去了，如果你sleep写在锁里面，导致线程1睡了，线程2就无法进入锁了。
            写在外面，线程1执行完了，锁就开了，线程1睡100ms 线程2就有机会抢到cpu执行权
             */
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
        int sum1 = 0;
        int max1 = 0;
        for (Integer i : list1) {
            sum1 += i;
            if (max1 < i) {

                max1 = i;
            }

        }
        int sum2 = 0;
        int max2 = 0;
        for (Integer i : list2) {
            sum2 += i;
            if (max2 < i) {

                max2 = i;
            }

        }
        if ("抽奖箱1".equals(getName())) {
            System.out.println(getName() + list1 + "最高奖项为" + max1 + "元，总计额为" + sum1 + "元");
        } else {
            System.out.println(getName() + list2 + "最高奖项为" + max2 + "元，总计额为" + sum2 + "元");
        }

    }


}
